package Sistema;

import java.util.ArrayList;

import Excepcion.EstacionInalcanzableException;
import Excepcion.EstacionInexistenteException;
import Excepcion.TrayectoInexistenteException;

public class EstacionIntermedia extends Estacion {
	
	private TrayectoComun trayectoComunSaliente;
	private ArrayList<TrayectoDeMantenimiento> trayectosDeMantenimientoSalientes;
	
	/**Constructos de la clase, recive el nombre de la estacion y la redVial a la que pertenece
	 * @param nombre
	 * @param r
	 */
	public EstacionIntermedia(String nombre, RedVial r) {
		super(nombre, r);
		
		trayectosDeMantenimientoSalientes = new ArrayList<TrayectoDeMantenimiento>();
	}
	
	/**Retorna el trayecto saliente de la estacion
	 * @return
	 */
	public TrayectoComun getTrayectoComunSaliente() {
		return trayectoComunSaliente;
	}
	
	/**Almacena el trayecto saliente de la estacion
	 * @param trayectoComun
	 */
	public void setTrayectoComunSaliente(TrayectoComun trayectoComun) {
		trayectoComunSaliente = trayectoComun;
	}
	
	/**Retorna la lista de trayectos de mantenimiento salientes de la estacion
	 * @return
	 */
	public ArrayList<TrayectoDeMantenimiento> getTrayectosDeMantenimientoSalientes() {
		return trayectosDeMantenimientoSalientes;
	}
	
	/**almacena trayectos de mantenimiento salientes en un array list de trayectos de mantenimiento
	 * @param trayectoDeMantenimiento
	 */
	public void addTrayectoDeMantenimientoSaliente(TrayectoDeMantenimiento trayectoDeMantenimiento) {
		trayectosDeMantenimientoSalientes.add(trayectoDeMantenimiento);
	}
	
	/**Elimina un trayecto de mantenimiento
	 * @param origenTrayecto
	 * @param destinoTrayecto
	 * @throws TrayectoInexistenteException
	 */
	public void eliminarTrayectoDeMantenimientoSaliente(Estacion origenTrayecto, Estacion destinoTrayecto) throws TrayectoInexistenteException {
		if (!this.equals(origenTrayecto) && !trayectoComunSaliente.getDestino().equals(destinoTrayecto)) {
			throw new TrayectoInexistenteException();
		}
		else {
		for(int i=0; i<trayectosDeMantenimientoSalientes.size();i++){
			if(trayectosDeMantenimientoSalientes.get(i).getOrigen().equals(origenTrayecto) && trayectosDeMantenimientoSalientes.get(i).getDestino().equals(destinoTrayecto)){
				trayectosDeMantenimientoSalientes.remove(i);
			}
			}
		}
	}
		
	public boolean equals(Object objeto) {
		if (objeto != null
				&& objeto.getClass() == EstacionIntermedia.class
				&& ((EstacionIntermedia)objeto).equals(nombre)) {
			return true;
		}
		return false;
	}
	
}
	
